
#include "connection.h"
#include "../../Session.h"
#include "../../NResource/Static.h"


namespace ProjectZ { namespace NCommand { namespace NConnection {


void CS_CONNECT::OnExecute( User * pUser, ::Network::Packet *pPacket )
{
	/*
	 * // 플레이어의 상태와 상관 없이, 소켓 연결 후에는 반드시 CS_CONNECT 또는
	// CS_RECONNECT 둘중 하나가 최초로 발생해야 함
	CS_CONNECT		0x202
	{
		str social_id;		/// 카카오톡 사용자 아이디(GUID)  login ID 17자리
		u8	u8type;			// connect types 0:일반 접속, 1:물리적 채널 변경, 2:논리적 채널 변경
		u8	server_id;		// 접속하는 서버 인덱스
		u16	u16channel_id;	// 접속하는 채널 인덱스
	}

	SC_CONNECT		0x203
	{
		s16		ack;
		u32		u32encrypt_key;	// encrypt key
	}

	 */

	STRESSLOG("[CHANNEL] CS_CONNECT::ONEXECUTE");

//	char social_id[32] = {0, };
//	int connect_type = 0;
//	int server_id = 0;
//	int channel_id = 0;

	Toolkit::Str<32> strSocialID;
	uint8_t u8type;
	uint16_t server_id;
	uint16_t u16channel_id;

	Encryption::Instance().Decrypt_First(pPacket);

	* pPacket >> strSocialID >> u8type >> server_id >> u16channel_id;

	if(true == ::ProjectZ::Config::Instance().GetResourceDatabase()._isBlock)
	{
		if( false == NResource::Static::Instance().GetAllowUserResource()->IsAllowUser(strSocialID.c_str()) )
			return;
	}
//	int keys[4];
//	keys[0] = Encryption::Instance().GetKey();
//	keys[1] = Encryption::Instance().GetKey1();
//	keys[2] = Encryption::Instance().GetKey2();
//	keys[3] = Encryption::Instance().GetKey3();
//	unsigned char * public_keys = reinterpret_cast<unsigned char *>(& keys);
//	DEBUGLOG("0x%x", public_keys[0]);
//	DEBUGLOG("0x%x", public_keys[1]);
//	DEBUGLOG("0x%x", public_keys[2]);
//	DEBUGLOG("0x%x", public_keys[3]);
//	DEBUGLOG("0x%x", public_keys[4]);
//	DEBUGLOG("0x%x", public_keys[5]);
//	DEBUGLOG("0x%x", public_keys[6]);
//	DEBUGLOG("0x%x", public_keys[7]);
//	DEBUGLOG("0x%x", public_keys[8]);
//	DEBUGLOG("0x%x", public_keys[9]);
//	DEBUGLOG("0x%x", public_keys[10]);
//	DEBUGLOG("0x%x", public_keys[11]);
//	DEBUGLOG("0x%x", public_keys[12]);
//	DEBUGLOG("0x%x", public_keys[13]);
//	DEBUGLOG("0x%x", public_keys[14]);
//	DEBUGLOG("0x%x", public_keys[15]);


	STRESSLOG("CS_CONNECT SOCIALID : %s", strSocialID.c_str());

	::Network::Packet * pAck = ::Network::GETPACKETPOOL()->SEND_NEW();
	pAck->Write2(1);
	pAck->MsgCat("%d", Encryption::Instance().GetKey());
	pAck->MsgCat("%d", Encryption::Instance().GetKey1());
	pAck->MsgCat("%d", Encryption::Instance().GetKey2());
	pAck->MsgCat("%d", Encryption::Instance().GetKey3());





	pAck->MakePacket(CMD_SC_CONNECT);

	Encryption::Instance().Encrypt_First((unsigned char *)strSocialID.c_str(), strlen(strSocialID.c_str()), pAck);
	pAck->SetNoEncryt();
	pUser->GetSession()->SendPacket(pAck, 1, true);
	//pUser->GetSession()->SendPacket(pAck, 1);
}


} /*NWorld*/ } /*NCommand*/ } /*ProjectZ*/

